package arbol_prueba;

import matematicadiscretaxml.Lexema;
import matematicadiscretaxml.ObjetoQuery;

public class BTree {
    private BTree izquierda= null;
    private BTree derecha= null;
    private ObjetoQuery[][] matriz_query = new ObjetoQuery[0][0];
    private Object elemento;
    
    public static int LADO_IZDO= 1;
    public static int LADO_DRCHO= 2;
    
    public BTree(Object elemento) {
	this.elemento  = elemento ;
    }  

    public Object getElement() {
	return elemento;
    }

    public BTree getIzquierda() {
	return izquierda;
    }

    public BTree getDerecha() {
	return derecha;
    }

    public void insertar(BTree tree, int lado) throws BTreeException {

	if (lado==LADO_IZDO) {
	    if (izquierda==null) izquierda= tree;
	    else throw new BTreeException("Ya hay un arbol enlazado");
	} else 	if (lado==LADO_DRCHO) {
	    if (derecha==null) derecha= tree;
	    else throw new BTreeException("Ya hay un arbol enlazado");
	} else throw new BTreeException("Lado incorrecto");

    }

    public BTree extraer(int lado) throws BTreeException {
        BTree subarbol;

	if (lado==LADO_IZDO) {
	    subarbol= izquierda;
            izquierda= null;
	} else 	if (lado==LADO_DRCHO) {
	    subarbol= derecha;
            derecha= null;
	} else throw new BTreeException("Lado incorrecto");

	return subarbol;
    }

//    public void imprimePreOrden() {
//	System.out.println(elemento);
//	if (izquierda!=null) izquierda.imprimePreOrden();
//	if (derecha!=null) derecha.imprimePreOrden();
//    }

    public void imprimePostOrden() {
	if (izquierda!=null) izquierda.imprimePostOrden();
	if (derecha!=null) derecha.imprimePostOrden();
	System.out.println("ARBOL SINTACTICO : "+((Lexema)elemento).getLexema()) ;
    }

    /**
     * @return the matriz_query
     */
    public ObjetoQuery[][] getMatriz_query() {
        return matriz_query;
    }

    /**
     * @param matriz_query the matriz_query to set
     */
    public void setMatriz_query(ObjetoQuery[][] _matriz_query) {
        this.matriz_query = _matriz_query;
    }

//    public void imprimeEnOrden() {
//	if (izquierda!=null) izquierda.imprimeEnOrden();
//	System.out.println(elemento);
//	if (derecha!=null) derecha.imprimeEnOrden();
//    }

}
